/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable prettier/prettier */
/* eslint-disable prefer-const */
/* eslint-disable @typescript-eslint/no-unused-vars */
/* eslint-disable @typescript-eslint/explicit-function-return-type */
import { app, ipcMain } from 'electron'
import { autoUpdater } from 'electron-updater'
import WindowHandle from './window'

export default function handleUpdate(_win) {
  // 模式
  const isDevelopment = process.env.NODE_ENV === 'development';
  // Windows自动拼接latest.yml 例如：http://127.0.0.1:3000/api/update/latest.yml
  // mac自动拼接latest-mac.yml 例如：http://127.0.0.1:3000/api/update/latest-mac.yml
  // let reqHttpsC = 'http://127.0.0.1:3000/api/update' // 你的更新服务器地址
  let reqHttpsC = ''
  // 根据不同模式请求地址
  if(isDevelopment){
    let envData: any = import.meta.env
    reqHttpsC = envData.VITE_UPLOAD_URL + '/update';
  }else{
    let envData: any = import.meta.env
    reqHttpsC = envData.VITE_BASE_URL + '/update';
  }

  // const options: any = {
  //     requestHeaders: {
  //         eletype: process.type,
  //         elearch: process.arch,
  //         eleplatform: process.platform,
  //         eleversion: process.env.npm_package_version,
  //     },
  //     provider: 'generic',
  //     url: reqHttpsC,
  //     channel: 'latest'
  // }
  // const autoUpdater = new NsisUpdater(options)
  
  autoUpdater.forceDevUpdateConfig = true //开发环境下强制更新
  autoUpdater.autoDownload = false; // 自动下载
  autoUpdater.autoInstallOnAppQuit = false; //默认会静默安装新版本，如果不想静默安装
  autoUpdater.allowPrerelease = true // 启用增量更新通道
  // autoUpdater.addAuthHeader(`Bearer ${token}`)
  
  // 获取更新数据
  autoUpdater.setFeedURL(reqHttpsC);

  // 检查更新
  let mainWindow: any = {}
  autoUpdater.checkForUpdatesAndNotify().then(async (infos: any) => {
    // 当前版本
    let version = app.getVersion()
    if ((infos.updateInfo.version && infos.updateInfo.version != version) && infos.updateInfo.code == 0) {
      let whandle = new WindowHandle()
      let updateWin = await whandle.createWin({
        path: '/upload',
        title: '更新',
        width: 400,
        height: 400
      })
      mainWindow = updateWin?.saveId.win
      // 发送更新信息给页面
      ipcMain.handle('update-info', ()=>{
        return {
          info:infos.updateInfo
        }
      })
    }
  }).catch(() => {})

  // 手动下载更新
  ipcMain.on('download-update', async () => {
    autoUpdater.downloadUpdate()
  })

  // 进度条
  autoUpdater.on('download-progress', (progress) => {
    mainWindow.webContents.send('update-state', {
      status: 'downloading',
      progress: Math.floor(progress.percent)
    })
  })

  // 显示立即安装按钮
  autoUpdater.on('update-downloaded', () => {
    mainWindow.webContents.send('update-state', {
      status: 'downloaded'
    })
  })

  // 退出并安装更新
  ipcMain.on('quit-and-install', () => {
    // 安装到当前目录
    const extractPath:any = app.getAppPath();
    autoUpdater.quitAndInstall(false, extractPath)
  })

  return{
    autoUpdater
  }
  
}
